// 导入具名函数要使用{}包裹
// 导入token的保存和提取具名函数
import { setToken, getToken, removeToken, saveTime } from '@/utils/auth'
// 导入登录接口函数
import { login, getInfo, getBasicInfo } from '@/api/user'
// 导入重置路由方法
import {resetRouter} from '@/router'
export default {
  namespaced: true, // 命名空间
  state: {
    // 获取存储在cookie中的token
    token: getToken(),
    // 用户信息是对象
    userInfo: {}
  },
  getters: {

  },
  mutations: {
    // 保存传入的token
    updataToken(state, token) {
      state.token = token
      setToken(token)
      // 保存登录时的时间戳
      saveTime()
    },
    // 保存用户信息
    updataUserInfo(state, info) {
      state.userInfo = info
    },
    // 删除token
    deleteToken(state) {
      state.token = null
      removeToken()
    },
    // 删除用户信息
    deleteUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // 获取token
    async login(context, form) {
      // 调用接口发起请求
      const res = await login(form)
      // 返回token
      // console.log('登录结果', res)
      // 存储token
      context.commit('updataToken', res)
    },
    // 获取用户信息
    async getUserInfo(context) {
      const res = await getInfo()
      // console.log(res)
      const basic = await getBasicInfo(res.userId)
      // console.log(basic)
      // 模拟图片加载失败
      // basic.staffPhoto = 'http://hr81-1314424979.cos.ap-guangzhou.myqcloud.com/.jpg'
      // 展开符合并对象
      context.commit('updataUserInfo', { ...res, ...basic })
    },
    // 退出登录
    logout(context) {
      // 删除token
      context.commit('deleteToken')
      // 删除用户信息
      context.commit('deleteUserInfo')
      // 清理vuex中的pages用户路由
      context.commit('pages/resetRoute', null, { root: true })
      // 清理路由对象
      resetRouter()
    }

  }
}
